;
(function($, window, document, undefined) {
	'use strict';

	var eyc = {};

	/***************************************************************************
	 * *********************************** 资源********************************
	 **************************************************************************/

	var LOCAL_STORAGE_KEY = {
		DATA_COMBO : "DATA_COMBO",
		TABEL_COLUMN : "TABEL_COLUMN",
		QUERY_PARAM : "QUERY_PARAM",
		DATA_LATEST : "DATA_LATEST"
	};

	/**
	 * 资源接口
	 */
	eyc.resource = {
		// 初始化
		init : function(res) {
			resourceList = res;
			return resourceList;
		},

		// 获取所有资源
		getAllRes : function() {
			return resourceList;
		},

		// 根据ID查询资源
		getResById : function(resId) {
			return getResById(this.getAllRes(), resId);
		},

		// 返回LocalStorage KEY
		getLocalStorageKeys : function() {
			return LOCAL_STORAGE_KEY;
		},
	}

	var resourceList;

	function getResById(resList, resId) {
		for ( var res in resList) {
			// 父节点
			if (resList[res].subResList && resList[res].subResList.length > 0) {
				// 递归
				var m = getResById(resList[res].subResList, resId)
				if (m)
					return m;
			}
			// 子节点
			else {
				if (resList[res].resId == resId) {
					return resList[res];
				}
			}
		}
	}

	/***************************************************************************
	 * ********************************* 主TAB页********************************
	 **************************************************************************/

	/**
	 * 主TAB页接口
	 */
	eyc.contabs = {

		// 打开指定页面 option =
		// {
		// url： URL ,
		// menuId： 页面ID(URL优先),
		// menuNme： 名称 ,
		// menuIcon： 图标 ,
		// param： 参数,
		// isPromptReload： 多次打开同一页面，是否提示需要重载页面,
		// success: 打开后回调
		// }
		openNewPage : function(option) {
			return openNewPage(option);
		},

		// 打开指定页面
		openNewPageByMenuId : function(menuId, menuNme, menuIcon, param) {
			return openNewPage({
				menuId : menuId,
				menuNme : menuNme,
				menuIcon : menuIcon,
				param : param
			});
		},

		// 打开指定页面
		openNewPageByUrl : function(url, menuNme, menuIcon, param) {
			return openNewPage({
				url : url,
				menuNme : menuNme,
				menuIcon : menuIcon,
				param : param
			});
		},

		// 关闭当前页
		closeActivePage : function() {
			contabs.closePageById(contabs.getActivePageId());
		},
		
		// 获取当前页
		getActivePage : function() {
			return contabs.getActivePage();
		},

		// 获取当前页ID
		getActivePageId : function() {
			return contabs.getActivePageId();
		},
		
		// 重绘当前页
		repaintActivePage : function() {
			return contabs.repaintActivePage();
		},

		// 根据ID获取页对象
		getPageWinById : function(id) {
			return contabs.getPageWinById(id);
		},

		// 获取当前Active页面
		getActivePageWin : function() {
			return contabs.getActivePageWin();
		},

		// 按SEQ返回页面WIN(0代表当前页面，1代表前一页面)
		getPageWinByTracingSeq : function(seq) {
			return contabs.getPageWinByTracingSeq(seq);
		},
	};

	function openNewPage(option) {
		if (!option)
			return;

		if (!option.url && !option.menuId)
			return;

		var url = option.url, menuId = option.menuId, menuNme = option.menuNme, menuIcon = option.menuIcon;
		var param = option.param, isPromptReload = option.isPromptReload, success = option.success;

		if (!option.url && option.menuId) {
			var menu = eyc.resource.getResById(menuId);
			if (menu) {
				if (!menuNme)
					menuNme = menu.resNme;
				if (!menuIcon)
					menuIcon = menu.icon;

				url = menu.url;
			}
			// 有些直接拿menuId作为URL
			else {
				url = menuId;
			}
		}

		if (param)
			url = url + "?" + eyc.util.parseUrlParam(param);

		// 默认传递本页ID，用于新页面获取后回调
		var currPageId = eyc.contabs.getActivePageId();
		if (!success) {
			success = function(newPageId, newPageWin) {
				if (newPageWin.eyc)
					newPageWin.eyc.prePageId = currPageId;
			}
		}

		option.url = url;
		option.title = menuNme;
		option.icon = menuIcon;
		option.isFix = option.isFix ? option.isFix : false;
		option.success = success;
		return contabs.addNewTab(option);
	}

	/***************************************************************************
	 * ***************************** jQuery AJAX ******************************
	 **************************************************************************/

	var sysErrMsgId = 'SYS_ERROR_MSG';// 提示层ID，同ID只弹出一个
	var defaultErrMsg = '服务器繁忙，请稍后再试！';
	var errMsg404 = '系统维护中，请稍后再试！';

	/**
	 * AJAX相关接口
	 */
	eyc.ajax = {

		// AJAX默认完成处理
		ajaxComplete : function(XMLHttpRequest, textStatus, notAutoShowMsg) {
			return ajaxComplete(XMLHttpRequest, textStatus, notAutoShowMsg);
		},

		// AJAX默认异常处理
		ajaxError : function(jqXHR, textStatus, errorThrown) {
			return ajaxError(jqXHR, textStatus, errorThrown);
		},

		// 登录窗口
		showLoginDialog : function() {
			return showLoginDialog();
		},
		
		// 提权窗口
		showPermElevateDialog : function(errMsg) {
			return showPermElevateDialog(errMsg);
		},
	}

	// AJAX默认完成处理
	function ajaxComplete(XMLHttpRequest, textStatus, notAutoShowMsg) {
		if (XMLHttpRequest.status == '404' || XMLHttpRequest.status == '504') {
			var msg = XMLHttpRequest.status == '404' ? errMsg404 : defaultErrMsg;
			if (self != top && parent.window.layer) {
				parent.layer.alert(msg, {
					id : sysErrMsgId
				});
			} else if (window.layer) {
				layer.alert(msg, {
					id : sysErrMsgId
				});
			} else {
				alert(msg, {
					id : sysErrMsgId
				});
			}
			return;
		}

		// 通过XMLHttpRequest取得响应结果
		var res = XMLHttpRequest.responseText;
		try {
			var rt = JSON.parse(res);
			if (rt.code!==200) {
				// 重新认证
				if (rt.code == 401) {
					// 弹出框
					eyc.ajax.showLoginDialog();
				}
				// 提权认证
				if (rt.code == 403 && rt.data == 'sensitiveOperation') {
					// 弹出框
					eyc.ajax.showPermElevateDialog(rt.message);
				}
				// 是否自动显示提示
				else if (notAutoShowMsg) {
				}
				// 报错信息
				else if (rt.messageDtl) {
					if (self != top && parent.window.layer) {
						parent.layer.confirm(rt.message, {
							btn : [ 'Detail', 'Close' ]
						}, function() {
							parent.layer.alert(rt.messageDtl)
						});
					} else if (window.layer) {
						layer.confirm(rt.message, {
							btn : [ 'Detail', 'Close' ]
						}, function() {
							layer.alert(rt.messageDtl)
						});
					} else {
						alert(rt.message);
					}
				} else {
					var errMsg = defaultErrMsg;
					if (rt.message)
						errMsg = rt.message;

					if (self != top && parent.window.layer) {
						parent.layer.alert(errMsg);
					} else if (window.layer) {
						layer.alert(errMsg);
					} else
						alert(errMsg);
				}
			}
		} catch (e) {
		}
	}

	// AJAX默认异常处理
	function ajaxError(jqXHR, textStatus, errorThrown) {
		if (jqXHR.status == '404' || jqXHR.status == '504') {
			var msg = jqXHR.status == '404' ? errMsg404 : defaultErrMsg;
			if (self != top && parent.window.layer) {
				parent.layer.alert(msg, {
					id : sysErrMsgId
				});
			} else if (window.layer) {
				layer.alert(msg, {
					id : sysErrMsgId
				});
			} else {
				alert(msg, {
					id : sysErrMsgId
				});
			}
		} else if (jqXHR.responseText) {
			var errorMsg = JSON.parse(jqXHR.responseText.replace(/\\/g, ""));
			// 弹出框
			if (errorMsg.messageDtl) {
				if (self != top && parent.window.layer) {
					parent.layer.confirm(errorMsg.message, {
						btn : [ 'Detail', 'Close' ]
					}, function() {
						parent.layer.alert(errorMsg.messageDtl)
					});
				} else if (window.layer) {
					layer.confirm(errorMsg.message, {
						btn : [ 'Detail', 'Close' ]
					}, function() {
						layer.alert(errorMsg.messageDtl)
					});
				} else {
					alert(errorMsg.message);
				}
			} else {
				var errMsg = defaultErrMsg;
				if (errorMsg.message)
					errMsg = errorMsg.message;

				if (self != top && parent.window.layer) {
					parent.layer.alert(errMsg);
				} else if (window.layer) {
					layer.alert(errMsg);
				} else
					alert(errMsg);
			}
		} else {
			if (jqXHR.statusText) {
				if (jqXHR.statusText == "abort")
					return;
				else if (self != top && parent.window.layer) {
					parent.layer.alert(jqXHR.statusText);
				} else if (window.layer) {
					layer.alert(jqXHR.statusText);
				} else {
					alert(jqXHR.statusText);
				}
			} else {
				if (self != top && parent.window.layer) {
					parent.layer.alert(defaultErrMsg);
				} else if (window.layer) {
					layer.alert(defaultErrMsg);
				} else {
					alert(defaultErrMsg);
				}
			}
		}
	}

	// 登录窗口
	function showLoginDialog() {
		if (self != top && parent.window.layer) {
			parent.layer.open({
				id : "Login.vue",
				title : false,
				type : 2,
				area : [ '550px', '270px' ],
				content : "/login/ajax"
			});
		} else if (window.layer) {
			layer.open({
				id : "Login.vue",
				title : false,
				type : 2,
				area : [ '550px', '270px' ],
				content : "/login/ajax"
			});
		} else {
			alert("401");
		}
	}

	// 提权窗口
	function showPermElevateDialog(errMsg) {
		if (self != top && parent.window.layer) {
			parent.layer.open({
				id : "permElevate",
				title : false,
				type : 2,
				area : [ '550px', '350px' ],
				content : encodeURI("/permElevate?errMsg=" + errMsg)
			});
		} else if (window.layer) {
			layer.open({
				id : "permElevate",
				title : false,
				type : 2,
				area : [ '550px', '350px' ],
				content : encodeURI("/permElevate?errMsg=" + errMsg)
			});
		} else {
			alert("403");
		}
	}

	/***************************************************************************
	 * ******************************** UTIL***********************************
	 **************************************************************************/

	var env;

	/**
	 * 工具接口
	 */
	eyc.util = {

		// 参数转换为URL PARAM格式
		parseUrlParam : function(param) {
			return $.param(param);
		},

		// 设置当前环境
		initEnv : function(environment) {
			env = environment;
			return env;
		},

		// 返回当前环境
		getEnv : function() {
			return env;
		},

		// 当前环境是否生产环境
		isEnvProd : function() {
			if (env && env.toLowerCase() == 'prod') {
				return true;
			}

			return false;
		},
	};

	window.eyc = eyc;

}(jQuery, window, document));
